'when'å¥ãçšããé«åºŠãªJavaScriptãã¿ãŒã³ãããã³ã°ã§ã匷åãªæ¡ä»¶ä»ãè©äŸ¡ãæ¢æ±ãã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããŸãã
JavaScriptã®ãã¿ãŒã³ãããã³ã°ïŒ'When'å¥ã«ããæ¡ä»¶ä»ããã¿ãŒã³è©äŸ¡
åŸæ¥ãåçã§æè»ãªæ§è³ªã§ç¥ãããŠããJavaScriptã§ãããããæ§é åããã宣èšçãªããã°ã©ãã³ã°ã¹ã¿ã€ã«ãä¿é²ããæ©èœããŸããŸãæ¡çšãããŠããŸããã©ã€ãã©ãªãããããŒã¶ã«ãéããŠæ³šç®ãéããŠãããã®ãããªæ©èœã®äžã€ãããã¿ãŒã³ãããã³ã°ã§ãããã¿ãŒã³ãããã³ã°ã«ãããéçºè ã¯ããŒã¿æ§é ãåè§£ãããã®æ§é ãšå€ã«åºã¥ããŠã³ãŒããå®è¡ã§ããŸãããã®ããã°èšäºã§ã¯ããã¿ãŒã³ãããã³ã°ã®å®è£ ã§äžè¬çã«èŠãããæ©èœã§ãã'when'å¥ã䜿çšãããæ¡ä»¶ä»ããã¿ãŒã³è©äŸ¡ãšãã匷åãªæŠå¿µãæãäžããŸãã
ãã¿ãŒã³ãããã³ã°ãšã¯ïŒ
ãã®æ žå¿ã«ãããŠããã¿ãŒã³ãããã³ã°ã¯å€ããã¿ãŒã³ã«å¯ŸããŠãã§ãã¯ããå€ããã¿ãŒã³ã«äžèŽããå Žåã«å€ã®äžéšãæœåºããŠãããªãåŠçãè¡ãæè¡ã§ããè€éã«ãã¹ããã`if`æãåé·ãª`switch`æã«ä»£ããããã衚çŸåè±ãã§ç°¡æœãªæ¹æ³ãšèããŠãã ããããã¿ãŒã³ãããã³ã°ã¯ãHaskellãScalaãF#ãªã©ã®é¢æ°åããã°ã©ãã³ã°èšèªã§åºã䜿ãããŠãããJavaScriptãPythonãªã©ã®äž»æµèšèªã«ããŸããŸãå°å ¥ãããŠããŸãã
JavaScriptã§ã¯ããã¿ãŒã³ãããã³ã°ã¯éåžžããts-patternãïŒTypeScriptçšïŒã®ãããªã©ã€ãã©ãªããçŸåšECMAScriptã§æ€èšäžã®ãã¿ãŒã³ãããã³ã°ææ¡ãªã©ãéããŠå®çŸãããŸãã
'When'ã®åïŒæ¡ä»¶ä»ããã¿ãŒã³è©äŸ¡
'when'å¥ã¯ããã¿ãŒã³ã«æ¡ä»¶ä»ãããžãã¯ã远å ã§ããããã«ããããšã§ãåºæ¬çãªãã¿ãŒã³ãããã³ã°ã®èœåãæ¡åŒµããŸããããã¯ãå€ã®æ§é ãäžèŽãã*ãã€*'when'å¥ã§æå®ãããæ¡ä»¶ãtrueãšè©äŸ¡ãããå Žåã«ã®ã¿ãã¿ãŒã³ãäžèŽããããšãæå³ããŸããããã«ããããã¿ãŒã³ãããã³ã°ããžãã¯ã«ããªãã®æè»æ§ãšç²ŸåºŠãå ãããŸãã
ã°ããŒãã«ãªeã³ããŒã¹ãã©ãããã©ãŒã ã®ãŠãŒã¶ãŒããŒã¿ãåŠçããã·ããªãªãèããŠã¿ãŸãããããŠãŒã¶ãŒã®æåšå°ãæ¶è²»ç¿æ £ã«åºã¥ããŠç°ãªãå²åŒãé©çšãããå ŽåããããŸãã'when'ããªããã°ããã¿ãŒã³ãããã³ã°ã®ã±ãŒã¹å ã«ãã¹ããã`if`æãã§ããŠããŸããã³ãŒããèªã¿ã«ãããä¿å®ãé£ãããªããŸãã'when'ã䜿ãã°ããããã®æ¡ä»¶ããã¿ãŒã³å ã«çŽæ¥è¡šçŸã§ããŸãã
å ·äœäŸ
ãããå®çšçãªäŸã§èª¬æããŸããããããã§ã¯ã'when'æ©èœä»ãã®ãã¿ãŒã³ãããã³ã°ãæäŸããæ¶ç©ºã®ã©ã€ãã©ãªã䜿çšããŸãã䜿çšããç¹å®ã®ã©ã€ãã©ãªãææ¡ã«ãã£ãŠæ§æãç°ãªãå Žåãããããšã«æ³šæããŠãã ããã
äŸ1ïŒ'When'ã䜿çšããåºæ¬çãªåãã§ãã¯
ã·ã¹ãã ãåä¿¡ããããŸããŸãªçš®é¡ã®ã¡ãã»ãŒãžãåŠçããããšããŸãïŒ
function processMessage(message) {
match(message)
.with({ type: "text", content: P.string }, (msg) => {
console.log(`ããã¹ãã¡ãã»ãŒãžãåŠçäžïŒ ${msg.content}`);
})
.with({ type: "image", url: P.string }, (msg) => {
console.log(`ç»åã¡ãã»ãŒãžãåŠçäžïŒ ${msg.url}`);
})
.otherwise(() => {
console.log("äžæãªã¡ãã»ãŒãžã¿ã€ã");
});
}
processMessage({ type: "text", content: "Hello, world!" }); // åºåïŒ ããã¹ãã¡ãã»ãŒãžãåŠçäžïŒ Hello, world!
processMessage({ type: "image", url: "https://example.com/image.jpg" }); // åºåïŒ ç»åã¡ãã»ãŒãžãåŠçäžïŒ https://example.com/image.jpg
processMessage({ type: "audio", file: "audio.mp3" }); // åºåïŒ äžæãªã¡ãã»ãŒãžã¿ã€ã
ãã®åºæ¬çãªäŸã§ã¯ã`type`ããããã£ãšã`content`ã`url`ã®ãããªä»ã®ããããã£ã®ååšã«åºã¥ããŠãããã³ã°ãè¡ã£ãŠããŸãã`P.string`ã¯ããŒã¿åããã§ãã¯ããããã®ãã¬ãŒã¹ãã«ããŒã§ãã
äŸ2ïŒå°åãšæ¯åºé¡ã«åºã¥ãæ¡ä»¶ä»ãå²åŒèšç®
次ã«ã'when'å¥ã远å ããŠããŠãŒã¶ãŒã®æåšå°ãšæ¯åºé¡ã«åºã¥ããŠå²åŒãåŠçããŸãããïŒ
function calculateDiscount(user) {
match(user)
.with(
{
country: "USA",
spending: P.number.gt(100) //P.number.gt(100)ã¯spendingã100ãã倧ããããã§ãã¯ããŸã
},
() => {
console.log("100ãã«ä»¥äžå©çšããç±³åœãŠãŒã¶ãŒã«10%ã®å²åŒãé©çšããŸã");
return 0.1;
}
)
.with(
{
country: "Canada",
spending: P.number.gt(50)
},
() => {
console.log("50ãã«ä»¥äžå©çšããã«ããã®ãŠãŒã¶ãŒã«5%ã®å²åŒãé©çšããŸã");
return 0.05;
}
)
.with({ country: P.string }, (u) => {
console.log(`${u.country}ã®ãŠãŒã¶ãŒã«ã¯ç¹å¥å²åŒã¯ãããŸãã`);
return 0;
})
.otherwise(() => {
console.log("å²åŒã¯é©çšãããŸããã");
return 0;
});
}
const user1 = { country: "USA", spending: 150 };
const user2 = { country: "Canada", spending: 75 };
const user3 = { country: "UK", spending: 200 };
console.log(`ãŠãŒã¶ãŒ1ã®å²åŒïŒ ${calculateDiscount(user1)}`); // åºåïŒ 100ãã«ä»¥äžå©çšããç±³åœãŠãŒã¶ãŒã«10%ã®å²åŒãé©çšããŸã; ãŠãŒã¶ãŒ1ã®å²åŒïŒ 0.1
console.log(`ãŠãŒã¶ãŒ2ã®å²åŒïŒ ${calculateDiscount(user2)}`); // åºåïŒ 50ãã«ä»¥äžå©çšããã«ããã®ãŠãŒã¶ãŒã«5%ã®å²åŒãé©çšããŸã; ãŠãŒã¶ãŒ2ã®å²åŒïŒ 0.05
console.log(`ãŠãŒã¶ãŒ3ã®å²åŒïŒ ${calculateDiscount(user3)}`); // åºåïŒ UKã®ãŠãŒã¶ãŒã«ã¯ç¹å¥å²åŒã¯ãããŸãã; ãŠãŒã¶ãŒ3ã®å²åŒïŒ 0
ãã®äŸã§ã¯ã'when'å¥ïŒ`with`颿°å ã«æé»çã«è¡šçŸãããŠããŸãïŒã«ãã£ãŠã`spending`ããããã£ã«æ¡ä»¶ãæå®ã§ããŸããå²åŒãé©çšããåã«ãæ¯åºãç¹å®ã®ãããå€ãè¶ ããŠãããã確èªã§ããŸããããã«ãããåã±ãŒã¹å ã§ãã¹ããã`if`æãäžèŠã«ãªããŸãã
äŸ3ïŒçºæ¿ã¬ãŒãã§ç°ãªãéè²šãæ±ã
ååŒã®é貚ã«åºã¥ããŠç°ãªãçºæ¿ã¬ãŒããé©çšããå¿ èŠããããããè€éãªã·ããªãªãèããŠã¿ãŸããããããã«ã¯ãã¿ãŒã³ãããã³ã°ãšæ¡ä»¶ä»ãè©äŸ¡ã®äž¡æ¹ãå¿ èŠã§ãïŒ
function processTransaction(transaction) {
match(transaction)
.with(
{ currency: "USD", amount: P.number.gt(0) },
() => {
console.log(`USDååŒãåŠçäžïŒ ${transaction.amount}`);
return transaction.amount;
}
)
.with(
{ currency: "EUR", amount: P.number.gt(0) },
() => {
const amountInUSD = transaction.amount * 1.1; // 1ãŠãŒã = 1.1ç±³ãã«ãšä»®å®
console.log(`EURååŒãåŠçäžïŒ ${transaction.amount} EURïŒ${amountInUSD} USDã«æç®ïŒ`);
return amountInUSD;
}
)
.with(
{ currency: "GBP", amount: P.number.gt(0) },
() => {
const amountInUSD = transaction.amount * 1.3; // 1ãã³ã = 1.3ç±³ãã«ãšä»®å®
console.log(`GBPååŒãåŠçäžïŒ ${transaction.amount} GBPïŒ${amountInUSD} USDã«æç®ïŒ`);
return amountInUSD;
}
)
.otherwise(() => {
console.log("ãµããŒããããŠããªãé貚ãŸãã¯ç¡å¹ãªååŒã§ãã");
return 0;
});
}
const transaction1 = { currency: "USD", amount: 100 };
const transaction2 = { currency: "EUR", amount: 50 };
const transaction3 = { currency: "JPY", amount: 10000 };
console.log(`ååŒ1ã®USD䟡å€ïŒ ${processTransaction(transaction1)}`); // åºåïŒ USDååŒãåŠçäžïŒ 100; ååŒ1ã®USD䟡å€ïŒ 100
console.log(`ååŒ2ã®USD䟡å€ïŒ ${processTransaction(transaction2)}`); // åºåïŒ EURååŒãåŠçäžïŒ 50 EURïŒ55 USDã«æç®ïŒ; ååŒ2ã®USD䟡å€ïŒ 55
console.log(`ååŒ3ã®USD䟡å€ïŒ ${processTransaction(transaction3)}`); // åºåïŒ ãµããŒããããŠããªãé貚ãŸãã¯ç¡å¹ãªååŒã§ãã; ååŒ3ã®USD䟡å€ïŒ 0
ãã®äŸã§ã¯'when'æ©èœãçŽæ¥äœ¿çšããŠããŸãããããã¿ãŒã³ãããã³ã°å šè¬ããç°ãªãã·ããªãªïŒç°ãªãé貚ïŒãåŠçãã察å¿ããããžãã¯ïŒçºæ¿ã¬ãŒã倿ïŒãé©çšããããã«ã©ã®ããã«äœ¿çšã§ãããã瀺ããŠããŸãã'when'å¥ã远å ããŠæ¡ä»¶ãããã«çµã蟌ãããšãã§ããŸããããšãã°ããŠãŒã¶ãŒã®æåšå°ãåç±³ã®å Žåã«ã®ã¿EURãUSDã«å€æãããã以å€ã®å Žåã¯EURãCADã«å€æãããšãã£ãããšãå¯èœã§ãã
ãã¿ãŒã³ãããã³ã°ã§'When'ã䜿çšããå©ç¹
- å¯èªæ§ã®åäžïŒ æ¡ä»¶ããžãã¯ããã¿ãŒã³å ã«çŽæ¥è¡šçŸããããšã§ããã¹ããã`if`æãé¿ããã³ãŒããçè§£ããããããŸãã
- ä¿å®æ§ã®åäžïŒ 'when'ã䜿çšãããã¿ãŒã³ãããã³ã°ã®å®£èšçãªæ§è³ªã«ãããã³ãŒãã®å€æŽãæ¡åŒµã容æã«ãªããŸããæ°ããã±ãŒã¹ã®è¿œå ãæ¢åã®æ¡ä»¶ã®å€æŽãããç°¡åã«ãªããŸãã
- å®åã³ãŒãã®åæžïŒ ãã¿ãŒã³ãããã³ã°ã¯ãå埩çãªåãã§ãã¯ãããŒã¿æœåºã³ãŒãã®å¿ èŠæ§ããã°ãã°ãªãããŸãã
- 衚çŸåã®åäžïŒ 'When'ã䜿çšãããšãè€éãªæ¡ä»¶ãç°¡æœãã€ãšã¬ã¬ã³ããªæ¹æ³ã§è¡šçŸã§ããŸãã
èæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
- ã©ã€ãã©ãª/ææ¡ã®ãµããŒãïŒ ãã¿ãŒã³ãããã³ã°æ©èœã®å©çšå¯èœæ§ãšæ§æã¯ãJavaScriptç°å¢ã䜿çšããŠããã©ã€ãã©ãªãææ¡ã«ãã£ãŠç°ãªããŸããèªåã®ããŒãºãšã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã«æãé©ããã©ã€ãã©ãªãææ¡ãéžæããŠãã ããã
- ããã©ãŒãã³ã¹ïŒ ãã¿ãŒã³ãããã³ã°ã¯ã³ãŒãã®å¯èªæ§ãåäžãããããšãã§ããŸããããã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ããããšãäžå¯æ¬ ã§ããè€éãªãã¿ãŒã³ãæ¡ä»¶ã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããã³ãŒãããããã¡ã€ãªã³ã°ããå¿ èŠã«å¿ããŠæé©åããããšãéèŠã§ãã
- ã³ãŒãã®æçæ§ïŒ 'when'ã䜿çšããŠããã³ãŒãã®æçæ§ãç¶æããããšãéèŠã§ãããã¿ãŒã³ãçè§£ãã«ãããããããªé床ã«è€éãªæ¡ä»¶ã¯é¿ããŠãã ãããæå³ã®ãã倿°åãã³ã¡ã³ãã䜿çšããŠããã¿ãŒã³ã®èåŸã«ããããžãã¯ã説æããŸãããã
- ãšã©ãŒãã³ããªã³ã°ïŒ ãã¿ãŒã³ãããã³ã°ããžãã¯ã«ãäºæããªãå ¥åå€ãé©åã«åŠçããããã®ãšã©ãŒãã³ããªã³ã°ã¡ã«ããºã ãå«ããããã«ããŠãã ãããããã§ã¯`otherwise`å¥ãéèŠã§ãã
å®äžçã§ã®å¿çš
'when'ã䜿çšãããã¿ãŒã³ãããã³ã°ã¯ã以äžã®ãããªããŸããŸãªå®äžçã®ã·ããªãªã«é©çšã§ããŸãïŒ
- ããŒã¿æ€èšŒïŒ APIãªã¯ãšã¹ãããŠãŒã¶ãŒå ¥åãªã©ãåä¿¡ããŒã¿ã®æ§é ãšå€ãæ€èšŒããŸãã
- ã«ãŒãã£ã³ã°ïŒ URLããã®ä»ã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ã«åºã¥ããŠã«ãŒãã£ã³ã°ããžãã¯ãå®è£ ããŸãã
- ç¶æ 管çïŒ äºæž¬å¯èœã§ä¿å®ããããæ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã管çããŸãã
- ã³ã³ãã€ã©æ§ç¯ïŒ ããŒãµãŒããã®ä»ã®ã³ã³ãã€ã©ã³ã³ããŒãã³ããå®è£ ããŸãã
- AIãšæ©æ¢°åŠç¿ïŒ ç¹åŸŽæœåºãšããŒã¿ã®ååŠçã
- ã²ãŒã éçºïŒ ããŸããŸãªã²ãŒã ã€ãã³ãããã¬ã€ã€ãŒã®ã¢ã¯ã·ã§ã³ãåŠçããŸãã
äŸãã°ãåœéçãªéè¡ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããã'when'ã䜿ã£ããã¿ãŒã³ãããã³ã°ã䜿çšãããšãååŒå ã®åœãé貚ãéé¡ãååŒã®çš®é¡ïŒäŸïŒé éãåŒãåºããééïŒã«åºã¥ããŠååŒãç°ãªãæ¹æ³ã§åŠçã§ããŸããç¹å®ã®åœããçºä¿¡ãããååŒãç¹å®ã®éé¡ãè¶ ããååŒã«ã¯ãç°ãªãèŠå¶èŠä»¶ããããããããŸããã
çµè«
JavaScriptã®ãã¿ãŒã³ãããã³ã°ã¯ãç¹ã«æ¡ä»¶ä»ããã¿ãŒã³è©äŸ¡ã®ããã®'when'å¥ãšçµã¿åãããããšã§ããã衚çŸåè±ãã§ãèªã¿ããããä¿å®ããããã³ãŒããæžãããã®åŒ·åã§ãšã¬ã¬ã³ããªæ¹æ³ãæäŸããŸãããã¿ãŒã³ãããã³ã°ã掻çšããããšã§ãè€éãªæ¡ä»¶ããžãã¯ãå€§å¹ ã«ç°¡çŽ åããJavaScriptã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªå質ãåäžãããããšãã§ããŸããJavaScriptãé²åãç¶ããã«ã€ããŠããã¿ãŒã³ãããã³ã°ã¯éçºè ã®æŠåšãšããŠãŸããŸãéèŠãªããŒã«ã«ãªãã§ãããã
JavaScriptã®ãã¿ãŒã³ãããã³ã°ã«å©çšã§ããã©ã€ãã©ãªãææ¡ã調ã¹ã'when'å¥ã詊ããŠãã®ããã³ã·ã£ã«ãæå€§éã«åŒãåºããŠãã ããããã®åŒ·åãªãã¯ããã¯ãåãå ¥ããããªãã®JavaScriptã³ãŒãã£ã³ã°ã¹ãã«ãåäžãããŸãããã